﻿using CentralVacuum.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CentralVacuum.SqlSugarService
{
    public class SqlSugarHelper
    {
        //多库情况下使用说明：
        //如果是固定多库可以传 new SqlSugarScope(List<ConnectionConfig>,db=>{}) 文档：多租户
        //如果是不固定多库 可以看文档Saas分库
        //用单例模式
        public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
        {
            ConnectionString = @"DataSource=C:\FangYuanData\Datas\log.sqlite",//连接符字串
            DbType = DbType.Sqlite,//数据库类型
            IsAutoCloseConnection = true, //不设成true要手动close
            InitKeyType = InitKeyType.Attribute, //从实体特性中读取主键自增列信息
            MoreSettings = new ConnMoreSettings()
            {
                SqliteCodeFirstEnableDefaultValue = true, //启用默认值
                SqliteCodeFirstEnableDescription = true //启用备注
            }
        },
        db => {
            //(A)全局生效配置点，一般AOP和程序启动的配置扔这里面 ，所有上下文生效
            //调试SQL事件，可以删掉
            db.Aop.OnLogExecuting = (sql, pars) =>
            {
                Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
                //Global.LogNet.WriteInfo(db.ToString(), sql);
                //获取原生SQL推荐 5.1.4.63  性能OK
                //UtilMethods.GetNativeSql(sql,pars)

                //获取无参数化SQL 对性能有影响，特别大的SQL参数多的，调试使用
                //UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)

            };
            //sql执行完
            db.Aop.OnLogExecuted = (sql, pars) =>
            {
                Console.WriteLine($"执行时间：{db.Ado.SqlExecutionTime.TotalMilliseconds}");
                Global.LogNet.WriteInfo(db.ToString(), $"执行时间：{db.Ado.SqlExecutionTime.TotalMilliseconds}");
            };
            //sql报错
            db.Aop.OnError = (exp) =>
            {
                Console.WriteLine(exp.Sql);
                Global.LogNet.WriteError(db.ToString(), exp.Sql);
            };

            //多个配置就写下面
            //db.Ado.IsDisableMasterSlaveSeparation = true;

            //注意多租户 有几个设置几个
            //db.GetConnectionScope(5).Aop
        });

    }
}
